//
// Created by tanji on 2025/3/23.
//

#include "WifiConfig.h"
WifiConfig::WifiConfig(GlobalConfig& config) : config(config),lastLoopTime(0),loopInterval(5000)  {}
void WifiConfig::init() {
    // 可以在这里进行一些初始化操作，例如连接到服务器等
    // 目前暂不做具体操作
    debugLog("WifiConfig initialized.\n");
}

void WifiConfig::loop() {
    // 实现定时发送 HTTP 请求
    // 这里简单示例，后续可根据需求使用定时器
    unsigned long currentTime = millis();
    if (currentTime - lastLoopTime >= loopInterval) {
//        sendRequest();
        lastLoopTime = currentTime;
    }
}
// 切换成联网模式
void WifiConfig::setWIFI_STA(){
    // 退出 AP 模式并恢复联网
    WiFi.softAPdisconnect(true);  // 关闭 AP 模式
    WiFi.mode(WIFI_STA);  // 设置为 STA 模式
}


// 尝试连接 WiFi
void WifiConfig::tryConnectWiFi() {
//    淘汰的事件方法
//    // 订阅 STA 模式下获取到 IP 地址的事件
    WiFi.onStationModeGotIP([](const WiFiEventStationModeGotIP& event) {
        debugLog("Got IP address! \n");
    });
// 设置连接成功的回调函数
    WiFi.onStationModeConnected([](const WiFiEventStationModeConnected& event) {
        debugLog("Connected to WiFi\n");
//        syncTime();
        GlobalConstants::wifiConnected = true;
//        connectServices();
    });
//    订阅 STA 模式下断开连接的事件。当设备与 WiFi 网络断开连接时，会调用传入的回调函数。
    WiFi.onStationModeDisconnected([](const WiFiEventStationModeDisconnected& event) {
        debugLog("Disconnected from WiFi\n");
        GlobalConstants::wifiConnected = false;
    });
//    监听 Wi-Fi 客户端模式下认证模式改变的事件
    WiFi.onStationModeAuthModeChanged([this](const WiFiEventStationModeAuthModeChanged& event) {
        debugLog("WiFiEventStationModeAuthModeChanged from WiFi\n");
//        connectWiFi();
    });
    connectWiFi();

}
void WifiConfig::connectWiFi() {
    if (WiFi.begin(config.getWifiSsid().c_str(), config.getWifiPassword().c_str()) != WL_CONNECT_FAILED) {
        debugLog("WiFi connection attempt started\n");
    } else {
        debugLog("Failed to start WiFi connection attempt\n");
    }
}